#ifndef __LINKLIST_H_
#define __LINKLIST_H_
#include <stddef.h>

using ElementType = int;

class LinkList //链表的类
{
public:
    LinkList();
    LinkList(const LinkList& list);//拷贝构造
    ~LinkList();

    void show();

    void InsertTail(const ElementType& element);//尾插
    void InsertHead(const ElementType& element);//头插
    void InsertByIndex(int index,const ElementType& element);

    void RemvoeByIndex(int index);
    void RemoveByElement(const ElementType& element);

    void UpdateByIndex(int index,const ElementType& element);
    void UpdateByElement(const ElementType& Oldvalue,const ElementType& Newvalue);

    void BubbleSort();
    LinkList Merge(const LinkList& list); //归并

    void Sort();

    void Reserve();//逆序
    void Reserve2();

private:
    struct Node //定义在链表中的节点结构体
    {
        Node(const ElementType& value):value(value)
        {
            next = nullptr;
        }

        ElementType value; //节点中的数据
        Node * next; //指向下一个节点的指针
    };

    void FastSort(Node * start,Node * end);
    Node * Reserve2(Node * node);//递归逆序
    Node * head; //头指针
    size_t size; //节点个数
};

#endif